home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / UTILS / AMOS1.DMS / in.adf / SpriteX.AMOS / SpriteX.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1991-09-09  |  49.1 KB  |  2,428 lines

  1. Set Buffer 16
  2. '                ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
  3. '                ï¿½  ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½               ï¿½
  4. '                ï¿½  ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ \   /         ï¿½
  5. '                ï¿½  ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½   ï¿½   ï¿½ï¿½   \ /          ï¿½
  6. '                ï¿½  ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½\ ï¿½   ï¿½   ï¿½ï¿½    X           ï¿½
  7. '                ï¿½  ï¿½ï¿½ï¿½ ï¿½  ï¿½ï¿½ ï¿½ï¿½  ï¿½   ï¿½ï¿½ï¿½  / \          ï¿½
  8. '                ï¿½  ï¿½ï¿½ï¿½       ï¿½ï¿½      ï¿½ï¿½ï¿½ /   \  V1.3   ï¿½
  9. '                ï¿½  Modified from the AMOS Sprite       ï¿½
  10. '                ï¿½  Designer, as supplied with AMOS     ï¿½
  11. '                ï¿½  ï¿½ Mandarin Software 1990            ï¿½
  12. '                ï¿½  Written By Aaron Fothergill         ï¿½
  13. '                ï¿½  This version is Supplied with       ï¿½
  14. '                ï¿½  the AMOS Compiler and may not       ï¿½
  15. '                ï¿½  be resold or copied in any form.    ï¿½
  16. '                ï¿½                                      ï¿½
  17. '                ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½                ï¿½
  18. '                ï¿½                     ï¿½�
  19. '                ï¿½   Modifications     ï¿½�
  20. '                ï¿½  ï¿½ Shadow Software  ï¿½�
  21. '                ï¿½        1991         ï¿½�
  22. '                ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
  23. On Error Goto GENERALERROR
  24. ' do a Close Editor here if you desperately want more memory, but be 
  25. ' warned, there is then no memory checking, so it could bomb out ! 
  26. NTS=-Ntsc
  27. Bgrab 1
  28. Dim C(7),C2(7),C3(7),SX(7),ST(7),NC(7),RGB(63),REZ$(7),OK$(1),TPAL(15),AN$(20),O$(1)
  29. Dim LINE$(5),BUTTON$(2) : Rem for use with alert box routine 
  30. OK$(0)=" " : OK$(1)="*"
  31. O$(0)="Off" : O$(1)="On "
  32. NCOLS=16 : XSIZE=32 : YSIZE=32
  33. CVOL=62 : Rem click volume 
  34. APRD=6
  35. AIR=4
  36. STXSIZE=32 : STYSIZE=32 : STNCOLS=16
  37. TPWIN=0
  38. LFTWIN=0
  39. REZ=2
  40. XS=1
  41. IN=1
  42. FC=15
  43. BC=2
  44. FP=0
  45. LEFTC=1 : RIGHTC=0
  46. MDE=0 : Rem draw mode
  47. Get Block 1,0,0,1,1 : Get Block 2,0,0,1,1
  48. Fade 1
  49. For A=0 To 7 : Read SX(A),NC(A),ST(A),REZ$(A) : Next A
  50. Data 320,4,Lowres,"Lowres 4"
  51. Data 320,8,Lowres,"Lowres 8 "
  52. Data 320,16,Lowres,"Lowres 16"
  53. Data 320,32,Lowres,"Lowres 32"
  54. Data 320,64,Lowres,"Lowres 64"
  55. Data 640,4,Hires,"Hires 4  "
  56. Data 640,8,Hires,"Hires 8  "
  57. Data 640,16,Hires,"Hires 16 "
  58. Auto View Off 
  59. TITLEBAR
  60. Auto View Off 
  61. SC=Screen
  62. Screen Open 4,320,160,32,Lowres
  63. Curs Off : Flash Off : Cls 0 : Screen Hide 4
  64. Screen SC
  65. Gosub SHWPSTE
  66. CHANGEREZ
  67. For A=0 To 15 : TPAL(A)=Colour(A+16)
  68. Next A
  69. SPDISP=0
  70. Screen To Front 1
  71. Limit Mouse 
  72. Screen 1
  73. CHANGEREZ
  74. HILITE[21]
  75. Screen 0
  76. Limit Mouse 
  77. Reserve Zone 1
  78. SETBUTZONE
  79. SHWSPRITES[IN]
  80. SHWFILL[FP]
  81. Rem set up drawing screen zones
  82. Gosub STORE
  83. Do 
  84.    Screen 1
  85.    If XSIZE mod 16>0
  86.       XSIZE=(XSIZE/16)*16+16
  87.       XSIZE=Min(96,XSIZE)
  88.    End If 
  89.    If XSIZE>32 or YSIZE>32
  90.       BIGSPR=1
  91.       TPWO=-1 : LFTWO=-1
  92.       LFTWIN=Max(0,Min(LFTWIN,XSIZE-32))
  93.       TPWIN=Max(0,Min(TPWIN,YSIZE-32))
  94.    Else 
  95.       BIGSPR=0
  96.       LFTWIN=0
  97.       TPWIN=0
  98.    End If 
  99.    If NREZ=1
  100.       If SPDISP=1
  101.          SPDISP=0
  102.       End If 
  103.       Get Block 1,160*XS,7,XSIZE,YSIZE
  104.    End If 
  105.    Wait Vbl 
  106.    Reserve Zone 8
  107.    Set Zone 1,278*XS,3 To 310*XS,130
  108.    FASTZOOM
  109.    BXES
  110.    FASTZOOM
  111.    BIGBARS
  112.    PALDRAW
  113.    Screen To Front 1
  114.    Auto View On 
  115.    NREZ=0
  116.    MOF=1
  117.    FXSCRN
  118.    INO=IN
  119.    While NREZ=0
  120.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : K=Mouse Key
  121.       SCRNCHK[X,Y]
  122.       Z=Mouse Zone : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  123.       SHWSPO=SHWSP
  124.       If SCRN=0 and((Z>44 and Z<50) or Z=39 or Z=40 or Z=9) and SPDISP=0 and IN<=Length(1) and K>=2
  125.          GMDE=0
  126.          If Z=9
  127.             GMDE=1
  128.          End If 
  129.          SHWSP=1
  130.       Else 
  131.          SHWSP=0
  132.       End If 
  133.       If SPDISP=0
  134.          If IN<>INO
  135.             SHWSPO=-1
  136.          End If 
  137.          INO=IN
  138.          If SHWSP<>SHWSPO and SPDISP=0
  139.             If SHWSP=1
  140.                Screen 1
  141.                If SHWSPO=0
  142.                   Get Block 5,160*XS,7,96,128
  143.                   B5=1
  144.                End If 
  145.                Clip 160*XS,7 To 160*XS+95,135
  146.                Ink 0 : Bar 160*XS,7 To 160*XS+95,135
  147.                If GMDE=0
  148.                   Paste Bob 160*XS,7,IN
  149.                Else 
  150.                   Sprite 8,X Hard(1,160*XS),Y Hard(1,7),IN
  151.                End If 
  152.                Screen 0
  153.             Else 
  154.                If B5
  155.                   TS=Screen
  156.                   Screen 1
  157.                   Put Block 5,160*XS,7
  158.                   B5=0
  159.                   Sprite Off 
  160.                   Clip 
  161.                   Screen TS
  162.                End If 
  163.             End If 
  164.          End If 
  165.       End If 
  166.       If((SCRN=0 and Z>10 and Z<19) or MDE=12) and SPDISP=0 and MDE<>13
  167.          TS=Screen
  168.          Screen 1
  169.          XT=X : YT=Y : HTX=HX : HTY=HY
  170.          X=(HX-LFTWIN)*MP+16 : Y=7+(HY-TPWIN)*MP
  171.          Gosub GTBACK
  172.          MT=MDE
  173.          LC=LEFTC : RC=RIGHTC : LEFTC=NCOLS-1-Point(160*XS+HX,7+HY) : RIGHTC=LEFTC : MDE=0
  174.          Gosub PLTPNT
  175.          Wait Vbl 
  176.          Put Block 1,160*XS,7
  177.          X=XT : Y=YT : HX=HTX : HY=HTY
  178.          MDE=MT : LEFTC=LC : RIGHTC=RC
  179.          FASTZOOM
  180.          Screen TS
  181.       End If 
  182.       A$=Inkey$
  183.       If A$<>""
  184.          SC=Scancode
  185.          SH=Scanshift
  186.          Gosub KEYIN
  187.       End If 
  188.       K=Mouse Key
  189.       If K=0
  190.          MOF=1 : TICK=0
  191.       Else 
  192.          KPR=1
  193.       End If 
  194.       If K=2 and MDE<>10
  195.          DRG=1
  196.       End If 
  197.       If(X<>XMSO or Y<>YMSO) and KPR=0 and SHWSP=0
  198.          SC=Screen
  199.          Screen 1
  200.          Put Block 1,160*XS,7
  201.          FASTZOOM
  202.          Screen SC
  203.       End If 
  204.       If SCRN=1 and SHWSP=0 and K=0 and Z=2 and DRG=0 and MDE>0 and SPDISP=0 and MDE<>8 and MDE<>13
  205.          LPLT=1
  206.          TIM=Timer
  207.          If X<>XMSO or Y<>YMSO or(TIM mod 10<=4 and FLSH=0)
  208.             FLSH=1
  209.             If KPR=0
  210.                Put Block 1,160*XS,7
  211.             End If 
  212.             Gosub GTBACK
  213.             KPR=0
  214.             XT=X : YT=Y
  215.             Gosub PLTPNT
  216.             Wait Vbl 
  217.             Y=YT : X=XT
  218.             FASTZOOM
  219.          Else 
  220.             If TIM mod 10>4
  221.                FLSH=0
  222.             End If 
  223.          End If 
  224.       Else 
  225.          If LPLT=1
  226.             LPLT=0
  227.             SC=Screen
  228.             Screen 1
  229.             Put Block 1,160*XS,7
  230.             FASTZOOM
  231.             Screen SC
  232.          End If 
  233.       End If 
  234.       YMSO=Y : XMSO=X
  235.       If SCRN=1 and K>0 and SPDISP=0
  236.          Rem see what happens when you put Z=mouse zone here !
  237.          If Z=1
  238.             Gosub STORE
  239.             PICKCOL[X,Y,K]
  240.          End If 
  241.          If Z=2
  242.             REAL=1
  243.             Gosub PLTPNT
  244.             REAL=0
  245.             Gosub GTBACK
  246.             PLT=1
  247.          End If 
  248.          If Z=3
  249.             If MDE<>13
  250.                If K=1
  251.                   RESIZE[X,Y,K]
  252.                End If 
  253.             Else 
  254.                REDUCEZOOM[X,Y,K]
  255.             End If 
  256.          End If 
  257.       End If 
  258.       If SCRN=0 and(K and 1)=1
  259.          Gosub BUTTONS
  260.       End If 
  261.    Wend 
  262. Loop 
  263. KEYIN:
  264. A$=Upper$(A$)
  265. KEYIN$=A$
  266. SH=SH and 3
  267. If BIGSPR
  268.    FZ=0
  269.    If SC=76 and SH=0
  270.       TPWIN=Max(0,TPWIN-16)
  271.       FZ=1
  272.    End If 
  273.    If SC=77 and SH=0
  274.       TPWIN=Max(0,Min(YSIZE-32,TPWIN+16))
  275.       FZ=1
  276.    End If 
  277.    If SC=79 and SH=0
  278.       LFTWIN=Max(0,LFTWIN-16)
  279.       FZ=1
  280.    End If 
  281.    If SC=78 and SH=0
  282.       LFTWIN=Max(0,Min(XSIZE-32*XS,LFTWIN+16))
  283.       FZ=1
  284.    End If 
  285.    If FZ
  286.       FASTZOOM
  287.       BIGBARS
  288.    End If 
  289. End If 
  290. If SC=76 and SH
  291.    Bell 
  292.    Gosub GEDIT
  293.    SHWSPRITES[IN]
  294. End If 
  295. If SC=77 and SH
  296.    Bell 
  297.    Gosub SPGRAB
  298. End If 
  299. If SC=79 and SH
  300.    Bell 
  301.    TI=IN-1
  302.    Gosub GEDIT
  303.    IN=Max(1,TI)
  304.    Gosub SPGRAB
  305.    SHWSPRITES[IN]
  306. End If 
  307. If SC=78 and SH
  308.    Bell 
  309.    Gosub GEDIT
  310.    If IN<Length(1)
  311.       Inc IN
  312.       Gosub SPGRAB
  313.    End If 
  314.    SHWSPRITES[IN]
  315. End If 
  316. If MDE<>6
  317.    If SH=0 and SC>79 and SC<90
  318.       If IN+SC-80<=Length(1)
  319.          Bell 
  320.          TI=IN : IN=IN+SC-80
  321.          Gosub SPGRAB
  322.          IN=TI
  323.       End If 
  324.       SHWSPRITES[IN]
  325.    End If 
  326.    If SH>0 and SC>79 and SC<90
  327.       If IN+SC-80<=Length(1)+1
  328.          Bell 
  329.          TI=IN : IN=IN+SC-80
  330.          Gosub GEDIT
  331.          IN=TI
  332.       End If 
  333.       SHWSPRITES[IN]
  334.    End If 
  335.    If A$="X"
  336.       SMODE=1-SMODE : A$=""
  337.    End If 
  338.    If A$="A"
  339.       Gosub LDSPRITES : A$=""
  340.    End If 
  341.    If A$="L"
  342.       Gosub LDSPRITES : A$=""
  343.    End If 
  344.    If A$="S" and Length(1)>0
  345.       Gosub SVSPRITES : A$=""
  346.    End If 
  347. Else 
  348.    Gosub GTTXT
  349. End If 
  350. Return 
  351. LDSPRITES:
  352. Sprite Off 
  353. On Error Goto DISKERROR
  354. F$=""
  355. While F$=""
  356.    F$=Fsel$("*.ABK","","Load A Sprite or Icon Bank")
  357.    If F$<>""
  358.       F$=Upper$(F$)
  359.       If Right$(F$,4)=".ABK"
  360.          Open In 1,F$
  361.          L$=Input$(1,4)
  362.          Close 1
  363.          B=0
  364.          If L$="AmIc"
  365.             B=2
  366.          End If 
  367.          If L$="AmSp"
  368.             B=1
  369.          End If 
  370.          If B>0
  371.             If A$="L"
  372.                Erase B
  373.             End If 
  374.             Load F$,B
  375.             IN=1
  376.          End If 
  377.       Else 
  378.          F$=""
  379.       End If 
  380.    Else 
  381.       F$=" "
  382.    End If 
  383. Wend 
  384. NREZ=1
  385. If Length(1)>0
  386.    TS=Screen
  387.    Screen 1
  388.    Get Sprite Palette 
  389.    Screen TS
  390. End If 
  391. On Error Goto GENERALERROR
  392. Return 
  393. SVSPRITES:
  394. Sprite Off 
  395. On Error Goto DISKERROR
  396. F$="" : While F$=""
  397.    F$=Fsel$("*.ABK","","Save a Sprite Bank")
  398.    If F$<>""
  399.       A$=Upper$(F$)
  400.       If Right$(A$,4)=".ABK"
  401.          Save F$,1
  402.       Else 
  403.          F$=""
  404.       End If 
  405.    Else 
  406.       F$=" "
  407.    End If 
  408. Wend 
  409. NREZ=1
  410. On Error Goto GENERALERROR
  411. Return 
  412. PHONE:
  413. T1=Z mod 8+64 : T2=Z mod 8+48+(Z/3) mod 3
  414. Volume CVOL
  415. Play 1,T1,0 : Play 2,T2,0
  416. Play 3,T1,0 : Play 4,T2,0
  417. Wait 2 : Volume 0
  418. Return 
  419. BLL:
  420. Volume CVOL
  421. Bell 
  422. Wait 2 : Volume 0
  423. Return 
  424. BUTTONS:
  425. If Z>0
  426.    On BLEEP+1 Gosub PHONE,BLL
  427. End If 
  428. R=(Z-1)/10
  429. C=(Z-1) mod 10
  430. If Z=51
  431.    R=4 : C=10
  432. End If 
  433. If Z=52
  434.    R=4 : C=11
  435. End If 
  436. If(R<>2 or C<>9) and SPDISP=0 and MDE<>13
  437.    Gosub STORE
  438. End If 
  439. On R+1 Gosub ROW1,ROW2,ROW3,ROW4,ROW5,ROW6
  440. While Mouse Key<>0 and TICK<550
  441.    If TICK>0
  442.       Inc TICK
  443.    End If 
  444. Wend : If TICK=550
  445.    TICK=500
  446. End If 
  447. Return 
  448. ROW1:
  449. If C=9 and MDE<>13 and SPDISP=0
  450.    SMDE=1
  451.    Gosub SCRLLER
  452. End If 
  453. If C=0
  454.    MDE=9
  455.    HILITE[Z]
  456. End If 
  457. If C=1 and BLK4=1
  458.    MDE=10
  459.    DRG=0
  460.    HILITE[Z]
  461. End If 
  462. If C=2
  463.    PSTMDE=1-PSTMDE
  464.    Gosub SHWPSTE
  465. End If 
  466. If C>2 and C<8
  467.    On C-2 Gosub HNBR,HNTL,HNTR,HNBL,HNC
  468. End If 
  469. If C=8
  470.    GMDE=1-GMDE
  471. End If 
  472. Return 
  473. HNBR:
  474. HNX=XW : HNY=YH
  475. Return 
  476. HNTL:
  477. HNX=0 : HNY=0
  478. Return 
  479. HNTR:
  480. HNX=XW : HNY=0
  481. Return 
  482. HNBL:
  483. HNX=0 : HNY=YH
  484. Return 
  485. HNC:
  486. HNX=XW/2 : HNY=YH/2
  487. Return 
  488. SHWPSTE:
  489. Ink(1-PSTMDE)*5,0
  490. Set Pattern 2*(1-PSTMDE)
  491. Bar 82,21 To 89,28
  492. Bar 77,27 To 89,28
  493. Set Pattern 0
  494. Return 
  495. ROW4:
  496. If C=8 and IN>1
  497.    TICK=Max(TICK,1)
  498.    If Mouse Key=3
  499.       IN=Max(1,IN-10)
  500.    Else 
  501.       Dec IN
  502.    End If 
  503.    SHWSPRITES[IN]
  504. End If 
  505. If C=9
  506.    IN=Max(1,Length(1))
  507.    SHWSPRITES[IN]
  508. End If 
  509. If C=0
  510.    MDE=7
  511.    DRG=1
  512.    HILITE[Z]
  513. End If 
  514. If C=4
  515.    MDE=8
  516.    HILITE[Z]
  517. End If 
  518. If C=1 Then MDE=4 : DRG=1
  519. If C=2 Then MDE=2 : DRG=1
  520. If C=3 Then MDE=6 : DRG=0
  521. If C>0 and C<4
  522.    HILITE[Z]
  523. End If 
  524. If C=5 and MDE<>13 and SPDISP=0
  525.    Gosub VFLIP
  526. End If 
  527. If C=6 and MDE<>13 and SPDISP=0
  528.    SMDE=0
  529.    Gosub SCRLLER
  530. End If 
  531. If C=7 and MDE<>13 and SPDISP=0
  532.    ALERT["Clear Sprite|Are you sure?","Clear|Cancel"]
  533.    If Q=1
  534.       Gosub STORE
  535.       Screen 1
  536.       Set Paint 0
  537.       Set Pattern FP
  538.       Ink RIGHTC,LEFTC
  539.       Bar 160*XS,7 To 160*XS+XSIZE-1,6+YSIZE
  540.       Set Pattern 0
  541.       FASTZOOM
  542.       Screen 0
  543.    End If 
  544. End If 
  545. Return 
  546. ROW3:
  547. If C=9 and MDE<>13 and SPDISP=0
  548.    Gosub UNDO
  549. End If 
  550. If C=0
  551.    HILITE[Z]
  552.    MDE=0
  553.    DRG=0
  554. End If 
  555. If C=1 Then MDE=3 : MOF=1
  556. If C=2 Then MDE=1 : DRG=1
  557. If C=3 Then MDE=5 : DRG=1
  558. If C>0 and C<4
  559.    HILITE[Z]
  560. End If 
  561. If C=8
  562.    Dec FP
  563.    FP=(FP+35) mod 35
  564.    SHWFILL[FP]
  565. End If 
  566. If C=7
  567.    Gosub SELREZ
  568.    SCRN=1
  569.    NREZ=1
  570. End If 
  571. If C=4 and MDE<>13 and SPDISP=0
  572.    HILITE[Z]
  573.    MDE=13
  574.    Screen 1
  575.    Ink BC,FC,BC
  576.    Text 10,150,"Right Button Fixes,Change Mode to exit"
  577.    Ink 0
  578.    Bar 0,0 To 158*XS,138
  579.    Screen 0
  580.    Screen Copy 1,160*XS-1,6,160*XS+97,138 To 1,15,6
  581.    SC4=1
  582. End If 
  583. If C=5 and MDE<>13 and SPDISP=0
  584.    Gosub HFLIP
  585. End If 
  586. If C=6 and MDE<>13 and SPDISP=0
  587.    Gosub ROTATE
  588. End If 
  589. Return 
  590. ROW2:
  591. If C=9 and MDE<>13 and SPDISP=0
  592.    Gosub STORE
  593.    Gosub SCRUNCH1
  594. End If 
  595. If C=8 and MDE<>13 and SPDISP=0
  596.    Gosub STORE
  597.    Gosub SCRUNCH2
  598. End If 
  599. If C>=0 and C<8 and MDE<>13 and SPDISP=0
  600.    On C+1 Gosub HSTL,HSTR,HSBM,HSTM,HSBR,HSBL,HSC,HSUSER
  601. End If 
  602. Return 
  603. HSTL:
  604. HX=0 : HY=0 : Return 
  605. HSTR:
  606. HX=XSIZE-1 : HY=0 : Return 
  607. HSBM:
  608. HX=XSIZE/2 : HY=YSIZE-1 : Return 
  609. HSTM:
  610. HX=XSIZE/2 : HY=0 : Return 
  611. HSBR:
  612. HX=XSIZE-1 : HY=YSIZE-1 : Return 
  613. HSBL:
  614. HX=0 : HY=YSIZE-1 : Return 
  615. HSC:
  616. HX=XSIZE/2 : HY=YSIZE/2 : Return 
  617. HSUSER:
  618. DRG=0
  619. MDE=12
  620. HILITE[Z]
  621. Return 
  622. ROW5:
  623. If C=0
  624.    Gosub GTBACK
  625.    CHANGERGB
  626.    NREZ=1
  627. End If 
  628. If C=2 and MDE<>13
  629.    Gosub GEDIT
  630.    SHWSPRITES[IN]
  631. End If 
  632. If C=1 and MDE<>13
  633.    Gosub INSIT
  634.    SHWSPRITES[IN]
  635. End If 
  636. If C=3 and IN<=Length(1) and MDE<>13
  637.    Gosub SPGRAB
  638.    If SMODE=1
  639.       Gosub SCRUNCH2
  640.    End If 
  641. End If 
  642. If C=4 and IN<=Length(1)
  643.    Del Bob IN
  644.    SHWSPRITES[IN]
  645.    INO=-1
  646. End If 
  647. If C=5 and Length(1)>0
  648.    ALERT["Do you really want|to erase all your|Images ?","ERASE|CANCEL"]
  649.    If Q=1
  650.       If SMDE<2
  651.          Erase 1
  652.          IN=1
  653.          SHWSPRITES[IN]
  654.       Else 
  655.          Erase 2
  656.       End If 
  657.    End If 
  658. End If 
  659. If C=6
  660.    IN=1
  661.    SHWSPRITES[IN]
  662. End If 
  663. If C=8 and IN<=Length(1)
  664.    If Mouse Key=3
  665.       Add IN,10
  666.       IN=Min(Length(1)+1,IN)
  667.    Else 
  668.       Inc IN
  669.    End If 
  670.    SHWSPRITES[IN]
  671.    TICK=Max(1,TICK)
  672. End If 
  673. If C=7
  674.    If K=1
  675.       Auto View On 
  676.       SPDISP=1
  677.       Clip 
  678.       SHWSPRITES[IN]
  679.    End If 
  680. End If 
  681. If C=10
  682.    Inc FP
  683.    FP=FP mod 35
  684.    SHWFILL[FP]
  685. End If 
  686. If C=11
  687.    Gosub NICENESS
  688. End If 
  689. If C=9
  690.    ALERT["Are you sure you|Want to quit ?","Quit|Cancel"]
  691.    If Q=1
  692.       Default 
  693.       End 
  694.    End If 
  695. End If 
  696. Return 
  697. ROW6:
  698. If C=2
  699.    A$="L"
  700.    Gosub LDSPRITES : A$=""
  701. End If 
  702. If C=3
  703.    Gosub SVSPRITES
  704. End If 
  705. If C=4
  706.    A$="A"
  707.    Gosub LDSPRITES : A$=""
  708. End If 
  709. If C=5
  710.    Gosub GRABFROMIFF
  711. End If 
  712. If C=6
  713.    Gosub ICONTOGGLE
  714. End If 
  715. If C=7
  716.    Gosub SVICONS
  717. End If 
  718. If C=8 and NCOLS<32
  719.    Gosub TGGLEPAL
  720. End If 
  721. If C=9
  722.    Gosub ANMATOR
  723.    NREZ=1
  724. End If 
  725. Return 
  726. TGGLEPAL:
  727. TPAL=1-TPAL
  728. SC=Screen
  729. Screen 1
  730. For A=0 To 15
  731.    B=Colour(A) : C=TPAL(A)
  732.    Colour A,C : TPAL(A)=B
  733. Next A
  734. Screen SC
  735. Return 
  736. SPGRAB:
  737. If IN<=Length(1)
  738.    S=Screen
  739.    Screen 1
  740.    TPO=TPAL
  741.    If TPAL=1
  742.       Gosub TGGLEPAL
  743.    End If 
  744.    SB=Sprite Base(IN)
  745.    XSIZE=Min(96,Deek(SB)*16)
  746.    YSIZE=Min(128,Deek(SB+2))
  747.    If XSIZE>32 or YSIZE>32
  748.       BIGSPR=1
  749.    End If 
  750.    HX=Min(95,Deek(SB+6))
  751.    HY=Min(127,Deek(SB+8))
  752.    If SPDISP=0
  753.       BXES
  754.    End If 
  755.    Ink 0 : Bar 160*XS,7 To 160*XS+XSIZE-1,6+YSIZE
  756.    Paste Bob 160*XS,7,IN
  757.    If SPDISP=0
  758.       FASTZOOM
  759.       NREZ=1
  760.    End If 
  761.    Clip 
  762.    If TPO=1
  763.       Gosub TGGLEPAL
  764.    End If 
  765.    SHWSPRITES[IN]
  766.    Screen S
  767. Else 
  768.    Bell 
  769. End If 
  770. Return 
  771. HFLIP:
  772. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  773. A=0 : Repeat 
  774.    Screen Copy 1,XSIZE-A-1,0,XSIZE-A,YSIZE To 1,160*XS+A,7
  775.    Inc A
  776. Until A=XSIZE
  777. NREZ=1
  778. Return 
  779. VFLIP:
  780. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  781. A=0 : Repeat 
  782.    Screen Copy 1,0,YSIZE-A-1,XSIZE,YSIZE-A To 1,160*XS,7+A
  783. Inc A : Until A=YSIZE
  784. NREZ=1
  785. Return 
  786. ROTATE:
  787. XSIZE2=Min(96,Max(XSIZE,YSIZE))
  788. YSIZE2=XSIZE
  789. Autoback 0
  790. Screen 1
  791. Cls 0,0,0 To XSIZE2,YSIZE2+7
  792. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  793. Cls 0,160*XS,7 To 160*XS+XSIZE,7+YSIZE
  794. XSIZE=XSIZE2
  795. YSIZE=YSIZE2
  796. A=0 : Repeat : Ink FC : Plot 160*XS+96,6+A : Plot 159*XS,6+A
  797.    Ink BC : Plot 160*XS+96,7+A : Plot 159*XS,7+A
  798.    B=0 : Repeat : If A<YSIZE and B<XSIZE
  799.          Ink Point(A,B) : Plot 160*XS+XSIZE-B-1,7+A
  800.       End If 
  801.    Inc B : Until B=YSIZE
  802. Inc A : Until A=XSIZE
  803. Ink FC : Box 159*XS,6 To 160*XS+96,136
  804. NREZ=1
  805. Return 
  806. SHWCURS:
  807. Gosub GTBACK
  808. X2=(X-16)/MP : Y2=(Y-7)/MP
  809. CLPIT
  810. Paste Bob X2+160*XS,Y2+7,Length(1)
  811. FASTZOOM
  812. Clip 
  813. Put Block 1,160*XS,7
  814. Return 
  815. Rem Plot point general draw routine
  816. Rem lftwin & Tpwin are used when sprite is >64x64 to determine window area 
  817. PLTPNT:
  818. X=(X-16)/MP+LFTWIN : Y=(Y-7)/MP+TPWIN
  819. Y=Min(YSIZE-1,Y) : X=Min(XSIZE-1,X)
  820. Set Paint 0
  821. Set Pattern FP
  822. If K=1 or REAL=0
  823.    Ink LEFTC,RIGHTC,LEFTC
  824.    If REAL=0 and TIM mod 20<=4
  825.       Ink RIGHTC,LEFTC,RIGHTC
  826.    End If 
  827. Else 
  828.    If K=2 or Rnd(1)=0
  829.       Ink RIGHTC,LEFTC,RIGHTC
  830.    Else 
  831.       Ink LEFTC,RIGHTC,LEFTC
  832.    End If 
  833. End If 
  834. If K<>2 or MDE=0 or MDE=3 or MDE=6 or MDE=10 or MDE=12
  835.    On MDE+1 Gosub PLT,BX,BR,DRW,AIR,ELLPS,FELLPS,LINE,FLL,CUT,PSTE,HTSPOT,HTSPOT
  836. End If 
  837. Set Pattern 0
  838. FASTZOOM
  839. Return 
  840. HTSPOT:
  841. If K>0
  842.    HX=X : HY=Y
  843. End If 
  844. Return 
  845. PLT:
  846. Plot 160*XS+X,7+Y
  847. Return 
  848. DRW:
  849. If MOF=1
  850.    LPX=X : LPY=Y
  851.    MOF=0
  852. End If 
  853. Draw 160*XS+LPX,7+LPY To 160*XS+X,7+Y : If REAL=1 Then LPX=X : LPY=Y
  854. Return 
  855. DAIR:
  856. A=0 : Repeat 
  857.    Plot 160*XS+X+Rnd(XW)-Rnd(XW),7+Y+Rnd(XW)-Rnd(XW)
  858. Inc A : Until A>AIR
  859. Return 
  860. BX:
  861. If DRG
  862.    Gosub STRETCH
  863. Else 
  864.    CLPIT
  865.    Box 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  866.    Clip 
  867. End If 
  868. Return 
  869. STRETCH:
  870. STX=X Mouse : STY=Y Mouse
  871. CLPIT
  872. Gosub GTBACK
  873. OK=0
  874. XO=-1 : YO=-1
  875. LX=X+160*XS : LY=Y+7
  876. Set Pattern FP
  877. While OK=0
  878.    K=Mouse Key : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  879.    X=(X-16)/MP+LFTWIN : Y=(Y-7)/MP+TPWIN
  880.    If K=0
  881.       OK=1
  882.    End If 
  883.    If XO<>X or YO<>Y
  884.       XO=X : YO=Y
  885.       X=X+160*XS : Y=Y+7
  886.       X1=Max(LX,160*XS) : X2=Max(160*XS,Min(X,160*XS+XSIZE))
  887.       Y1=Max(LY,7) : Y2=Max(7,Min(7+YSIZE,Y))
  888.       TX=Min(X1,X2) : BX=Max(X1,X2)
  889.       TY=Min(Y1,Y2) : BY=Max(Y1,Y2)
  890.       BX=Max(TX+1,BX) : BY=Max(TY+1,BY)
  891.       Put Block 1,160*XS,7
  892.       Ink LEFTC,RIGHTC
  893.       On MDE Gosub SBX,SBR,SBR,SAIR,SELLPS,SELLPS,SLINE,SLINE,SBX
  894.       FASTZOOM
  895.    End If 
  896. Wend 
  897. Ink 0
  898. Put Block 1,160*XS,7
  899. XW=BX-TX : YH=BY-TY
  900. DRG=0
  901. Set Pattern 0
  902. Clip 
  903. X Mouse=STX : Y Mouse=STY
  904. Return 
  905. SBX:
  906. Box TX,TY To BX,BY
  907. Return 
  908. SBR:
  909. Bar TX,TY To BX,BY
  910. Return 
  911. SAIR:
  912. D=Max((BX-TX)/2,1)
  913. Circle TX+D,TY+D,D
  914. Return 
  915. SELLPS:
  916. DX=Max((BX-TX)/2,1) : DY=Max((BY-TY)/2,1)
  917. Ellipse TX+DX,TY+DY,DX,DY
  918. Return 
  919. SLINE:
  920. Draw LX,LY To X,Y
  921. Return 
  922. BR:
  923. If DRG=1
  924.    Gosub STRETCH
  925. Else 
  926.    CLPIT
  927.    Bar 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  928.    Clip 
  929. End If 
  930. Return 
  931. AIR:
  932. If DRG=1
  933.    Gosub STRETCH
  934.    XW=Max(1,Max(XW,YH)/2)
  935. Else 
  936.    CLPIT
  937.    Gosub DAIR
  938.    Clip 
  939. End If 
  940. Return 
  941. ELLPS:
  942. If DRG=1
  943.    Gosub STRETCH
  944.    XW=Max(1,XW/2) : YH=Max(1,YH/2)
  945.    HNX=XW : HNY=YH
  946. Else 
  947.    CLPIT
  948.    Ellipse 160*XS+X+XW-HNX,7+Y-HNY+YH,XW,YH
  949.    Clip 
  950. End If 
  951. Return 
  952. FELLPS:
  953. If DRG=1
  954.    DRG=0
  955.    TXT$=""
  956. Else 
  957.    CLPIT
  958.    Autoback 0
  959.    Gr Writing 0
  960.    Text 160*XS+X,7+Y,TXT$
  961.    Gr Writing 1
  962.    Clip 
  963. End If 
  964. Return 
  965. LINE:
  966. If DRG=1
  967.    Gosub STRETCH
  968.    XW=X2-LX : YH=Y2-LY
  969. Else 
  970.    CLPIT
  971.    Draw 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  972.    Clip 
  973. End If 
  974. Return 
  975. FLL:
  976. Screen 1
  977. Get Block 1,158*XS,5,100,135
  978. Set Pattern FP
  979. Set Paint 0
  980. If K=2
  981.    M=0
  982. Else 
  983.    M=1
  984. End If 
  985. Ink FC
  986. Box 158*XS,5 To 160*XS+XSIZE+1,8+YSIZE
  987. Ink BC
  988. Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  989. Ink LEFTC,RIGHTC,LEFTC
  990. Paint 160*XS+X,7+Y,M
  991. Get Block 2,160*XS,7,XSIZE,YSIZE
  992. Clip 
  993. Put Block 1,158*XS,5 : Put Block 2,160*XS,7
  994. Return 
  995. CUT:
  996. If K=1
  997.    Gosub STRETCH
  998.    Get Block 4,LX,LY,XW,YH,1
  999.    HNX=0 : HNY=0
  1000.    MDE=10
  1001.    Screen 0
  1002.    HILITE[2]
  1003.    Screen 1
  1004.    BLK4=1
  1005. End If 
  1006. Return 
  1007. PSTE:
  1008. CLPIT
  1009. If PSTMDE=1 or K=2
  1010.    Ink 0
  1011.    Bar 160*XS+X-HNX,7+Y-HNY To 160*XS+X-HNX+XW-1,6+Y-HNY+YH
  1012. End If 
  1013. If K<>2
  1014.    Put Block 4,160*XS+X-HNX,7+Y-HNY
  1015. End If 
  1016. Clip 
  1017. Return 
  1018. GTTXT:
  1019. A$=KEYIN$
  1020. KEYIN$=""
  1021. If A$<>""
  1022.    If A$=Chr$(8)
  1023.       TXT$=Left$(TXT$,Len(TXT$)-1)
  1024.    End If 
  1025.    If A$>=" "
  1026.       TXT$=TXT$+A$
  1027.    End If 
  1028. End If 
  1029. Return 
  1030. SCRUNCH1:
  1031. Screen 1
  1032. SCY=-1
  1033. A=0 : Repeat : B=0 : Repeat : If Point(160*XS+B,7+A)>0 Then SCY=A : B=XSIZE : A=YSIZE
  1034. Inc B : Until B>=XSIZE : Inc A : Until A>=YSIZE
  1035. SCX=-1
  1036. A=0 : Repeat : B=0 : Repeat : If Point(160*XS+A,7+B)>0 Then SCX=A : B=YSIZE : A=XSIZE
  1037. Inc B : Until B>=YSIZE : Inc A : Until A>=XSIZE
  1038. If SCY>=0 and SCX>=0
  1039.    Screen Copy 1,160*XS+SCX,7+SCY,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  1040.    CLPIT
  1041.    Ink 0 : Bar 160*XS,7+YSIZE-SCY To 160*XS+XSIZE+1,7+YSIZE+1
  1042.    Bar 160*XS+XSIZE-SCX,7 To 160*XS+XSIZE+1,7+YSIZE+1
  1043.    FASTZOOM
  1044.    Clip 
  1045. End If 
  1046. Screen 0
  1047. SREDO=1
  1048. Return 
  1049. SCRUNCH2:
  1050. Gosub SCRUNCH1
  1051. Screen 1
  1052. SCX=XSIZE
  1053. A=XSIZE-1 : Repeat : B=YSIZE-1 : Repeat : If Point(160*XS+A,7+B)>0 Then SCX=A : B=0 : A=0
  1054. Dec B : Until B<0 : Dec A : Until A<0
  1055. A=YSIZE-1 : Repeat : B=XSIZE-1 : Repeat : If Point(160*XS+B,7+A)>0 Then SCY=A : B=0 : A=0
  1056. Dec B : Until B<0 : Dec A : Until A<0
  1057. XSIZE=Max(16,SCX+1) : YSIZE=Max(1,SCY+1)
  1058. NREZ=1
  1059. Screen 0
  1060. Return 
  1061. Rem this routine grabs the data as a sprite,bob or icon
  1062. Rem IN = image number to grab to 
  1063. Rem HX & HY contain the Hot Spot location
  1064. INSIT:
  1065. SC=Screen
  1066. Screen 1
  1067. If IN<=Length(1)
  1068.    Ins Sprite IN
  1069. End If 
  1070. Gosub GEDITBOB
  1071. If IN=Length(1) and OK=1
  1072.    Inc IN
  1073. End If 
  1074. Screen SC
  1075. Return 
  1076. GEDIT:
  1077. SC=Screen
  1078. Screen 1
  1079. Gosub GEDITBOB
  1080. If IN=Length(1) and OK=1
  1081.    Inc IN
  1082. End If 
  1083. Screen SC
  1084. Return 
  1085. GEDITBOB:
  1086. On Error Goto FAIL
  1087. OK=1
  1088. Screen 1
  1089. Get Bob IN,160*XS,7 To 160*XS+XSIZE,7+YSIZE
  1090. Hot Spot IN,HX,HY
  1091. FAILSAFE:
  1092. On Error Goto GENERALERROR
  1093. Return 
  1094. FAIL:
  1095. SC=Screen
  1096. Screen 0
  1097. ALERT["Not Enough Memory to store image","O.K"]
  1098. Screen SC
  1099. NREZ=1
  1100. OK=0
  1101. Resume FAILSAFE
  1102. GTBACK:
  1103. Del Block 1
  1104. SC=Screen
  1105. Screen 1
  1106. Get Block 1,160*XS,7,Max(16,XSIZE),Max(16,YSIZE)
  1107. Screen SC
  1108. Return 
  1109. STORE:
  1110. XSIZE=Max(16,XSIZE) : YSIZE=Max(1,YSIZE)
  1111. S=Screen
  1112. Screen 1
  1113. Del Block 2
  1114. Get Block 2,160*XS,7,XSIZE,YSIZE
  1115. A=0 : Repeat : RGB(A)=Colour(A) : Inc A : Until A=Min(31,NCOLS)
  1116. STNCOLS=NCOLS : STXSIZE=XSIZE : STYSIZE=YSIZE
  1117. STBIG=BIGSPR : STTL=LFTWIN : STTP=TPWIN
  1118. Screen S
  1119. Return 
  1120. UNDO:
  1121. S=Screen
  1122. Screen 1
  1123. XSIZE=STXSIZE : YSIZE=STYSIZE : NCOLS=STNCOLS
  1124. BIGSPR=STBIG : LFTWIN=STTL : TPWIN=STTP
  1125. A=0 : Repeat : Colour A,RGB(A) : Inc A : Until A=Min(31,NCOLS)
  1126. BXES
  1127. Put Block 2,160*XS,7
  1128. FASTZOOM
  1129. BIGBARS
  1130. PALDRAW
  1131. Screen S
  1132. Return 
  1133. SCRLLER:
  1134. TS=Screen
  1135. Screen 0
  1136. Del Block 1
  1137. Get Block 1,208,10,80,64
  1138. Ink 0
  1139. Bar 209,11 To 274,60
  1140. Bar 214,16 To 279,65
  1141. Screen Copy 0,0,96,64,144 To 0,210,12
  1142. Reset Zone 
  1143. Reserve Zone 4
  1144. Set Zone 1,234,20 To 250,36
  1145. Set Zone 2,234,36 To 250,52
  1146. Set Zone 3,218,28 To 234,44
  1147. Set Zone 4,250,28 To 266,44
  1148. If SMDE=1
  1149.    Screen 1
  1150.    Get Block 3,160*XS,7,XSIZE,YSIZE
  1151.    Screen 0
  1152. End If 
  1153. OK=0
  1154. TMR=0
  1155. While OK=0
  1156.    K=Mouse Key : Z=Mouse Zone
  1157.    If K=0
  1158.       TMR=0
  1159.    End If 
  1160.    If K=2
  1161.       OK=1
  1162.    Else 
  1163.       If K=1
  1164.          On Z Gosub SUP,SDOWN,SLEFT,SRIGHT
  1165.          If SMDE=1
  1166.             Gosub SIZEREDO
  1167.             NREZ=1
  1168.          Else 
  1169.             FASTZOOM
  1170.          End If 
  1171.          While Mouse Key<>0 and TMR<500 : Inc TMR : Wend 
  1172.       End If 
  1173.    End If 
  1174. Wend 
  1175. Put Block 1,208,10
  1176. SETBUTZONE
  1177. Return 
  1178. SUP:
  1179. If SMDE=0
  1180.    Screen 1
  1181.    Get Block 3,160*XS,7,XSIZE,1
  1182.    Screen Copy 1,160*XS,8,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  1183.    Put Block 3,160*XS,6+YSIZE
  1184.    Del Block 3
  1185.    Screen 0
  1186. Else 
  1187.    If YSIZE>1
  1188.       Dec YSIZE
  1189.    End If 
  1190. End If 
  1191. Return 
  1192. SDOWN:
  1193. If SMDE=0
  1194.    Screen 1
  1195.    Get Block 3,160*XS,6+YSIZE,XSIZE,1
  1196.    Screen Copy 1,160*XS,7,160*XS+XSIZE,6+YSIZE To 1,160*XS,8
  1197.    Put Block 3,160*XS,7
  1198.    Del Block 3
  1199.    Screen 0
  1200. Else 
  1201.    If YSIZE<128
  1202.       Inc YSIZE
  1203.    End If 
  1204. End If 
  1205. Return 
  1206. SLEFT:
  1207. If SMDE=0
  1208.    Screen 1
  1209.    Get Block 3,160*XS,7,1,7+YSIZE
  1210.    Screen Copy 1,160*XS+1,7,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  1211.    Put Block 3,160*XS+XSIZE-1,7
  1212.    Del Block 3
  1213.    BXES2
  1214.    Screen 0
  1215. Else 
  1216.    If XSIZE>16
  1217.       Add XSIZE,-16
  1218.    End If 
  1219. End If 
  1220. Return 
  1221. SRIGHT:
  1222. If SMDE=0
  1223.    Screen 1
  1224.    Get Block 3,160*XS+XSIZE-1,7,1,YSIZE,1
  1225.    Screen Copy 1,160*XS,7,160*XS+XSIZE-1,7+YSIZE To 1,160*XS+1,7
  1226.    Ink 0
  1227.    Draw 160*XS,7 To 160*XS,6+YSIZE
  1228.    Put Block 3,160*XS,7
  1229.    Del Block 3
  1230.    BXES2
  1231.    Screen 0
  1232. Else 
  1233.    If XSIZE<96
  1234.       Add XSIZE,16
  1235.    End If 
  1236. End If 
  1237. Return 
  1238. SIZEREDO:
  1239. Screen 1
  1240. Cls 0,159*XS,7 To 160*XS+96,136
  1241. Put Block 3,160*XS,7
  1242. Ink FC,BC
  1243. Box 159*XS,6 To 160*XS+96,136
  1244. Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  1245. Ink BC,FC,BC
  1246. Text 120*XS-(XS=2)*100,150,"Size X:"+Right$(" "+Str$(XSIZE),2)+" Y:"+Right$("  "+Str$(YSIZE),3)
  1247. Screen 0
  1248. Return 
  1249. NICENESS:
  1250. Screen 0
  1251. Reset Zone 
  1252. Reserve Zone 20
  1253. Del Block 1
  1254. Get Block 1,16,0,304,96
  1255. Ink 0 : Bar 20,4 To 308,94
  1256. Ink 2 : Bar 16,0 To 304,90
  1257. Ink 1 : Polyline 16,90 To 16,0 To 304,0
  1258. Ink 7 : Polyline 17,90 To 304,90 To 304,1
  1259. Ink 6 : Bar 17,55 To 148,89
  1260. Set Paint 1
  1261. Ink 0,0,1 : Bar 48,80 To 82,88
  1262. Set Zone 1,47,81 To 81,87
  1263. Bar 156,80 To 190,88
  1264. Set Zone 8,157,81 To 189,87
  1265. Set Paint 0
  1266. Ink 1,6
  1267. Text 22,87,"Vol"
  1268. CX=CVOL/2
  1269. AX=AIR
  1270. Gosub VOLSLIDE
  1271. Gosub AIRSLIDE
  1272. SMALLBUTTON[2,"O.K",246,70]
  1273. QUADBUTTON[3,"Niceness Page",24,4]
  1274. QUADBUTTON[3,"Background Col",24,20]
  1275. QUADBUTTON[4,"Foreground Col",154,20]
  1276. QUADBUTTON[9,"Auto Squash "+O$(SMODE),24,38]
  1277. Ink 1,6
  1278. Text 24,66,"Button"
  1279. Text 24,76,"Click"
  1280. Ink 1,2
  1281. Text 156,66,"Airbrush"
  1282. Text 156,76,"Power"
  1283. TWINBUTTON[5,"Tone "+OK$(1-BLEEP),84,56]
  1284. TWINBUTTON[6,"Bell "+OK$(BLEEP),84,72]
  1285. TWINBUTTON[7,"Credits",218,38]
  1286. Ink 3,2
  1287. Text 156,14,"Free Chip"
  1288. Text 230,14,Str$(Int((Chip Free*100)/1024.0)/100.0)+"K"
  1289. OK=0
  1290. While OK=0
  1291.    While Mouse Key=0 : Wend : Z=Mouse Zone
  1292.    If Z=5
  1293.       BLEEP=0
  1294.       TWINBUTTON[5,"Tone *",84,56]
  1295.       TWINBUTTON[6,"Bell  ",84,72]
  1296.    End If 
  1297.    If Z=6
  1298.       BLEEP=1
  1299.       TWINBUTTON[5,"Tone  ",84,56]
  1300.       TWINBUTTON[6,"Bell *",84,72]
  1301.    End If 
  1302.    If Z=1
  1303.       CX=(X Screen(X Mouse)-49)
  1304.       Gosub VOLSLIDE
  1305.    End If 
  1306.    If Z=8
  1307.       AX=(X Screen(X Mouse)-157)
  1308.       Gosub AIRSLIDE
  1309.    End If 
  1310.    If Z=9
  1311.       SMODE=1-SMODE
  1312.       QUADBUTTON[9,"Auto Squash "+O$(SMODE),24,38]
  1313.       While Mouse Key>0 : Wend 
  1314.    End If 
  1315.    If Z=2
  1316.       OK=1
  1317.    End If 
  1318.    If Z=7
  1319.       CREDITS
  1320.    End If 
  1321.    If Z=3
  1322.       Inc BC
  1323.       BC=BC mod NCOLS
  1324.       If BC=FC
  1325.          Inc BC
  1326.          BC=BC mod NCOLS
  1327.       End If 
  1328.       BXES3
  1329.       PALDRAW
  1330.       Screen 0
  1331.    End If 
  1332.    If Z=4
  1333.       Inc FC
  1334.       FC=FC mod NCOLS
  1335.       If FC=BC
  1336.          Inc FC
  1337.          FC=FC mod NCOLS
  1338.       End If 
  1339.       BXES3
  1340.       PALDRAW
  1341.       Screen 0
  1342.    End If 
  1343. Wend 
  1344. Put Block 1,16,0
  1345. SETBUTZONE
  1346. Screen 0
  1347. Return 
  1348. VOLSLIDE:
  1349. Ink 0 : Bar 49+CVOL/2,81 To 50+CVOL/2,87
  1350. Bar 49,82 To 50+CVOL/2,86
  1351. CVOL=Max(0,Min(CX,31))*2
  1352. Ink 2 : Bar 49,82 To 50+CVOL/2,86
  1353. Ink 6 : Bar 49+CVOL/2,81 To 50+CVOL/2,87
  1354. Return 
  1355. AIRSLIDE:
  1356. Ink 0 : Bar 157+AIR,81 To 158+AIR,87
  1357. Bar 157,81 To 158+AIR,87
  1358. AIR=Max(0,Min(AX,31))
  1359. Ink 2 : Bar 157,82 To 158+AIR,86
  1360. Ink 6 : Bar 157+AIR,81 To 158+AIR,87
  1361. Return 
  1362. SELREZ:
  1363. Screen 0
  1364. Reset Zone 
  1365. Reserve Zone 8
  1366. Del Block 1
  1367. Get Block 1,48,0,240,96
  1368. Ink 0 : Bar 52,4 To 274,94
  1369. Ink 6 : Bar 48,0 To 270,90
  1370. Ink 1 : Polyline 48,90 To 48,0 To 270,0
  1371. Ink 7 : Polyline 49,90 To 270,90 To 270,1
  1372. Ink 1,2
  1373. A=0 : Repeat : B=0 : Repeat 
  1374.       TRIBUTTON[1+B*4+A,REZ$(B*4+A),64+B*96,A*16+20]
  1375. Inc B : Until B=2 : Inc A : Until A=4
  1376. Screen Copy 0,128,96,256,112 To 0,96,4
  1377. Ink 1,3
  1378. Text 100,14,"Select Mode"
  1379. REZ=-1
  1380. While REZ=-1
  1381.    While Mouse Key=0 : Wend : Z=Mouse Zone : While Mouse Key<>0 : Wend 
  1382.    If Z>0
  1383.       REZ=Z-1
  1384.    Else 
  1385.       Bell 
  1386.    End If 
  1387. Wend 
  1388. Put Block 1,48,0
  1389. Screen 1
  1390. Get Block 1,160*XS,7,96,128
  1391. Screen Close 1
  1392. CHANGEREZ
  1393. SETBUTZONE
  1394. Screen 1
  1395. Put Block 1,160*XS,7
  1396. Screen 0
  1397. Return 
  1398. Procedure SMALLBUTTON[BN,T$,BX,BY]
  1399.    Screen Copy 0,96,96,128,112 To 0,BX,BY
  1400.    Set Zone BN,BX,BY To BX+32,BY+16
  1401.    Ink 1,3 : Text BX+4,BY+10,T$
  1402. End Proc
  1403. Procedure TWINBUTTON[BN,T$,BX,BY]
  1404.    Screen Copy 0,96,112,160,128 To 0,BX,BY
  1405.    Set Zone BN,BX,BY To BX+64,BY+16
  1406.    Ink 1,3 : Text BX+4,BY+10,T$
  1407. End Proc
  1408. Procedure TRIBUTTON[BN,T$,BX,BY]
  1409.    Screen Copy 0,160,112,256,128 To 0,BX,BY
  1410.    Set Zone BN,BX,BY To BX+96,BY+16
  1411.    Ink 1,3 : Text BX+4,BY+10,T$
  1412. End Proc
  1413. Procedure QUADBUTTON[BN,T$,BX,BY]
  1414.    Screen Copy 0,128,96,256,112 To 0,BX,BY
  1415.    Set Zone BN,BX,BY To BX+128,BY+16
  1416.    Ink 1,3 : Text BX+4,BY+10,T$
  1417. End Proc
  1418. Procedure CHANGERGB
  1419.    Shared FC,BC,REZ,NCOLS,XS,TPAL,TPAL()
  1420.    Auto View On 
  1421.    Dim RGB(31)
  1422.    CL1=0 : CL2=NCOLS
  1423.    SC=Screen
  1424.    Screen Open 3,320,120,32,Lowres
  1425.    Curs Off : Flash Off : Get Palette 1 : Cls 0
  1426.    Screen 3
  1427.    Wait Vbl 
  1428.    Limit Mouse 
  1429.    Reserve Zone 40
  1430.    Ink 0,0
  1431.    Bar 13,8 To 217,112
  1432.    Ink FC,BC
  1433.    Bar 8,3 To 212,107
  1434.    Ink BC,FC
  1435.    Box 9,4 To 211,106
  1436.    Ink BC,FC
  1437.    A=0 : Repeat 
  1438.       Bar 15+A*20,6 To 30+A*20,104
  1439.       Set Zone A+1,15+A*20,6 To 30+A*20,104
  1440.       Inc A
  1441.    Until A=3
  1442.    A=0 : Repeat 
  1443.       Draw 10,6+A*6 To 75,6+A*6
  1444.       Inc A
  1445.    Until A=17
  1446.    A=CL1 : Repeat 
  1447.       Ink A,A : X=A mod 8 : Y=A/8
  1448.       Bar X*16+80,Y*16+8 To X*16+95,Y*16+23
  1449.       Set Zone A+4,X*16+80,Y*16+8 To X*16+95,Y*16+23
  1450.       RGB(A)=Colour(A)
  1451.    Inc A : Until A>=Min(32,CL2)
  1452.    Ink BC,FC
  1453.    Box 79,7 To 96+16*X,24+16*Y
  1454.    Box 80,90 To 140,100
  1455.    Text 86,98,"Cancel"
  1456.    Box 152,90 To 202,100
  1457.    Text 165,98,"O.K"
  1458.    Set Zone 36,80,90 To 140,100
  1459.    Set Zone 37,152,90 To 202,100
  1460.    Ink SELCOL
  1461.    Bar 195,78 To 201,87
  1462.    Ink BC : Box 194,77 To 202,88
  1463.    SFADERS[SELCOL]
  1464.    OK=0 : While OK=0
  1465.       While Mouse Key=0 : Wend : YM=Y Screen(Y Mouse) : Z=Mouse Zone
  1466.       If Z>0 and Z<4
  1467.          CFADERS[SELCOL,Z-1,YM]
  1468.          SFADERS[SELCOL]
  1469.       End If 
  1470.       If Z>3 and Z<36
  1471.          SELCOL=Z-4
  1472.          Ink SELCOL
  1473.          Bar 195,78 To 201,87
  1474.          SFADERS[SELCOL]
  1475.          Ink SELCOL
  1476.       End If 
  1477.       If Z=37
  1478.          OK=1
  1479.       End If 
  1480.       If Z=36
  1481.          A=CL1 : Repeat 
  1482.             Colour A,RGB(A) : SPCOL[A,RGB(A)]
  1483.          Inc A : Until A>=Min(32,CL2)
  1484.          OK=1
  1485.       End If 
  1486.    Wend 
  1487.    Screen 1
  1488.    Get Palette 3
  1489.    T=TPAL : If NCOLS>16 : T=0 : End If 
  1490.    For A=0 To NCOLS-1
  1491.       SPCOL[A+T*16,Colour(A)]
  1492.       If TPAL=1 and A<16
  1493.          Colour 16+A,Colour(A)
  1494.          SPCOL[A,TPAL(A)]
  1495.       End If 
  1496.    Next A
  1497.    Screen Close 3
  1498.    Screen SC
  1499. End Proc
  1500. Procedure CFADERS[S,F,YM]
  1501.    Dim R(2)
  1502.    C=Colour(S)
  1503.    R(0)=C/256
  1504.    R(1)=(C/16) mod 16
  1505.    R(2)=C mod 16
  1506.    V=Max(0,Min(15,15-(YM-7)/6))
  1507.    R(F)=V
  1508.    Screen 1
  1509.    Colour S,(R(0)*256+R(1)*16+R(2))
  1510.    Screen 3
  1511.    Colour S,(R(0)*256+R(1)*16+R(2))
  1512.    SPCOL[S,Colour(S)]
  1513. End Proc
  1514. Procedure SFADERS[S]
  1515.    Shared RGBO,BC,FC
  1516.    Dim R(2)
  1517.    C=RGBO
  1518.    R(0)=C/256
  1519.    R(1)=(C/16) mod 16
  1520.    R(2)=C mod 16
  1521.    Ink BC,BC
  1522.    A=0 : Repeat 
  1523.       V=(15-R(A))*6 : Bar 17+20*A,7+V To 28+20*A,12+V
  1524.       Inc A
  1525.    Until A=3
  1526.    C=Colour(S)
  1527.    RGBO=C
  1528.    R(0)=C/256
  1529.    R(1)=(C/16) mod 16
  1530.    R(2)=C mod 16
  1531.    Ink BC,FC
  1532.    Text 80,85,"Col"+Right$(" "+Str$(S),2)+" Val:$"+Right$("000"+Mid$(Hex$(RGBO),2),3)
  1533.    Ink FC,FC
  1534.    A=0 : Repeat 
  1535.       Ink FC,FC
  1536.       V=(15-R(A))*6 : Box 17+20*A,7+V To 28+20*A,12+V
  1537.       Ink S
  1538.       Bar 18+20*A,8+V To 27+20*A,11+V
  1539.       Inc A
  1540.    Until A=3
  1541. End Proc
  1542. Procedure SPCOL[A,B]
  1543.    If Length(1)>0
  1544.       Doke Start(1)+2+8*Length(1)+2*A,B
  1545.    End If 
  1546. End Proc
  1547. Procedure CHANGEREZ
  1548.    Shared SREDO,FC,BC,REZ,NCOLS,XS,NC(),SX(),ST(),TPAL
  1549.    Auto View Off 
  1550.    Screen Open 1,SX(REZ),160,NC(REZ),ST(REZ)
  1551.    Flash Off 
  1552.    NCOLS=NC(REZ) : XS=SX(REZ)/320
  1553.    Screen Display 1,,140,,160
  1554.    Curs Off 
  1555.    If Length(1)>0
  1556.       Get Sprite Palette 
  1557.    End If 
  1558.    FC=NCOLS-1 : BC=0 : A=0 : Repeat : If Colour(FC)<Colour(A) Then FC=A
  1559.       If Colour(BC)>Colour(A) Then BC=A
  1560.    Inc A : Until A=NCOLS
  1561.    Ink 0 : Bar 0,0 To 320*XS,160
  1562.    Auto View On 
  1563.    SREDO=1
  1564. End Proc
  1565. Procedure SCRNUP
  1566.    Shared NTS
  1567.    If NTS=1
  1568.       Screen Display 1,,80,,160
  1569.    Else 
  1570.       Screen Display 1,,140,,160
  1571.    End If 
  1572. End Proc
  1573. Procedure SCRNDOWN
  1574.    Screen Display 1,,140,,160
  1575. End Proc
  1576. Rem alert box routine without using the window commands
  1577. Rem uses the arrays line$() and button$()
  1578. Procedure SETBUTZONE
  1579.    Screen 0
  1580.    Reset Zone 
  1581.    Reserve Zone 60
  1582.    A=0
  1583.    Repeat 
  1584.       B=0
  1585.       Repeat 
  1586.          Set Zone A*10+B+1,B*32,A*16+16 To B*32+32,A*16+32
  1587.          Inc B
  1588.       Until B=10
  1589.       Inc A
  1590.    Until A=5
  1591.    For B=2 To 9
  1592.       Set Zone B+51,B*32,0 To B*32+32,15
  1593.    Next B
  1594.    Set Zone 29,256,48 To 272,64
  1595.    Set Zone 51,272,48 To 288,64 : Set Zone 52,288,64 To 320,80
  1596.    Set Zone 47,192,80 To 208,96 : Set Zone 39,208,80 To 224,96
  1597.    Set Zone 49,256,80 To 272,96 : Set Zone 40,272,80 To 288,96
  1598.    Set Zone 30,288,48 To 320,64
  1599. End Proc
  1600. Procedure CLPIT
  1601.    Shared XS,XSIZE,YSIZE
  1602.    Clip 160*XS,7 To 160*XS+XSIZE,7+YSIZE
  1603. End Proc
  1604. Procedure TITLEBAR
  1605.    Shared C(),C2()
  1606.    Change Mouse 3
  1607.    Auto View Off 
  1608.    Flash Off 
  1609.    Curs Off 
  1610.    Hide On 
  1611.    Screen Open 6,320,200,2,Lowres
  1612.    Screen Hide 6
  1613.    Screen Open 0,320,144,8,Lowres
  1614.    Curs Off : Flash Off : Cls 0
  1615.    Screen Display 0,,40,,96
  1616.    Unpack 6 To 2
  1617.    Screen Display 2,,40,,16
  1618.    Screen To Front 2
  1619.    Auto View On 
  1620.    Screen 0
  1621.    Fade 3 To 2
  1622.    For A=0 To 144 Step 4 : Screen Copy 2,0,A,320,A+4 To 0,0,A
  1623.       Screen Display 2,,40+A,,16
  1624.       Wait Vbl 
  1625.    Next A
  1626.    For A=144 To 0 Step -4 : Screen Copy 2,0,A,320,A+4 To 0,0,A
  1627.       Screen Display 2,,40+A,,16
  1628.       Wait Vbl 
  1629.    Next A
  1630.    Screen 0
  1631.    Show On 
  1632.    Screen Display 0,,40,,96
  1633.    Screen Copy 2,0,0,320,144 To 0,0,0
  1634.    Screen Close 2
  1635. End Proc
  1636. Procedure CPAUSE[C,C2]
  1637.    While Colour(C)<>C2 : Wend 
  1638. End Proc
  1639. Procedure FXSCRN
  1640.    Shared SCRN
  1641.    Y=Y Mouse
  1642.    If Y>141
  1643.       SCRN=1
  1644.       Screen 1
  1645.       SCRNUP
  1646.       Screen To Front 1
  1647.       Change Mouse 2
  1648.    Else 
  1649.       SCRN=0
  1650.       Screen 0
  1651.       SCRNUP
  1652.       Screen To Front 0
  1653.       Change Mouse 1
  1654.    End If 
  1655.    View 
  1656.    Limit Mouse 
  1657. End Proc
  1658. Procedure SCRNCHK[X,Y]
  1659.    Shared SREDO,NREZ,SPDISP,SCRN,SCRNO
  1660.    If SCRN=0 and Y>98
  1661.       SCRN=1
  1662.       Screen 1
  1663.       SCRNUP
  1664.       If SPDISP=1
  1665.          NREZ=1
  1666.          SREDO=1
  1667.          Screen Hide 4
  1668.       End If 
  1669.       Screen To Front 1
  1670.       Change Mouse 2
  1671.       Y=Y Hard(1,3)
  1672.    End If 
  1673.    If SCRN=1 and Y<=1
  1674.       SCRN=0
  1675.       Screen 0
  1676.       SCRNDOWN
  1677.       Screen To Front 0
  1678.       Change Mouse 1
  1679.       Y=Y Hard(0,95)
  1680.    End If 
  1681.    If SCRN<>SCRNO
  1682.       SCRNO=SCRN
  1683.       View 
  1684.       Limit Mouse 
  1685.       Y Mouse=Y
  1686.    End If 
  1687. End Proc
  1688. Procedure REDUCEZOOM[X,Y,K]
  1689.    Shared NREZ,BC,FC,XS,XSIZE,YSIZE
  1690.    Screen 1
  1691.    Zoom 1,16,7,16+XSIZE,7+YSIZE To 1,160*XS,7,Max(X,160*XS+1),Max(Y,8)
  1692.    Ink 0
  1693.    If X<160*XS+95
  1694.       Bar X,7 To 160*XS+95,135
  1695.    End If 
  1696.    If Y<135
  1697.       Bar 160*XS,Y To 160*XS+95,135
  1698.    End If 
  1699.    If K=2
  1700.       XSIZE=X-160*XS : YSIZE=Y-7
  1701.       Screen Copy 1,160*XS,7,160*XS+96,135 To 1,16,7
  1702.    Else 
  1703.       If K=0
  1704.          Screen Copy 1,16,7,112,135 To 1,160*XS,7
  1705.       End If 
  1706.    End If 
  1707. End Proc
  1708. Procedure RESIZE[X,Y,K]
  1709.    Shared NREZ,BC,FC,XS,XSIZE,YSIZE
  1710.    Screen 1
  1711.    Get Block 1,160*XS,7,XSIZE,YSIZE
  1712.    OK=0
  1713.    Ink BC,FC,BC
  1714.    Text 10,150," Press Right Button when done "
  1715.    While OK=0
  1716.       K=0
  1717.       While K=0
  1718.          Z=Mouse Zone
  1719.          K=Mouse Key
  1720.          X=X Screen(X Mouse)
  1721.          Y=Y Screen(Y Mouse)
  1722.       Wend 
  1723.       If K=1 and Z=3
  1724.          X=(X-160*XS)
  1725.          Y=(Y-7)
  1726.          X=Max(16,X)
  1727.          Y=Max(1,Y)
  1728.          XSIZE=X : YSIZE=Y
  1729.          X=X mod 16
  1730.          If X>0
  1731.             XSIZE=(XSIZE/16)*16+16
  1732.          End If 
  1733.          Cls 0,159*XS,7 To 160*XS+96,136
  1734.          Ink FC,BC
  1735.          Box 159*XS,6 To 160*XS+96,136
  1736.          Put Block 1,160*XS,7
  1737.          Ink FC,BC : Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  1738.       Else 
  1739.          OK=1
  1740.       End If 
  1741.    Wend 
  1742.    NREZ=1
  1743. End Proc
  1744. Procedure PICKCOL[X,Y,K]
  1745.    Shared NCOLS,REZ,XS,BC,FC,LEFTC,RIGHTC
  1746.    If K=1
  1747.       LEFTC=Point(X,Y)
  1748.    Else 
  1749.       RIGHTC=Point(X,Y)
  1750.    End If 
  1751.    PALDRAW2
  1752. End Proc
  1753. Procedure PALDRAW
  1754.    Shared NCOLS,REZ,XS,BC,FC,LEFTC,RIGHTC,XSIZE,YSIZE
  1755.    Set Pattern 0
  1756.    If Colour(BC)/2=Colour(FC)/2
  1757.       FC=1
  1758.       BC=0
  1759.       Set Pattern 2
  1760.    End If 
  1761.    REZ$=" Low"
  1762.    If XS>1 Then REZ$="High"
  1763.    Auto View Off 
  1764.    Screen 1
  1765.    X=NCOLS/8
  1766.    If X<1 Then X=1
  1767.    Y=8 : If NCOLS<8 Then Y=NCOLS
  1768.    S=32/X*XS
  1769.    Set Paint 1
  1770.    Ink FC,BC,FC
  1771.    Bar 269*XS,2 To 319*XS,142
  1772.    Bar 0,142 To 320*XS,152
  1773.    Ink BC,FC,BC
  1774.    Text 269*XS,150,REZ$
  1775.    Set Paint 0
  1776.    Ink 0,0,0
  1777.    Bar 277*XS,6 To 279*XS+X*S-1,23+(Y-1)*16
  1778.    A=0 : Repeat : B=0 : Repeat 
  1779.          Ink A*8+B
  1780.          Bar 278*XS+A*S,7+B*16 To 278*XS+(A+1)*S-1,22+B*16
  1781.       Inc B : Until B>=Y
  1782.    Inc A : Until A=X
  1783.    Ink BC,FC,BC
  1784.    Text 120*XS-(XS=2)*100,150,"Size X:"+Right$(" "+Str$(XSIZE),2)+" Y:"+Right$("  "+Str$(YSIZE),3)
  1785.    PALDRAW2
  1786. End Proc
  1787. Procedure PALDRAW2
  1788.    Shared FC,BC,LEFTC,RIGHTC,XS,NCOLS
  1789.    Set Paint 1
  1790.    Y=8 : If NCOLS<8 Then Y=NCOLS
  1791.    Ink LEFTC,BC,BC
  1792.    Bar 272*XS,7 To 275*XS,7+Y*16
  1793.    Ink RIGHTC,BC,BC
  1794.    Bar 313*XS,7 To 316*XS,7+Y*16
  1795.    Set Paint 0
  1796. End Proc
  1797. Procedure HILITE[B]
  1798.    Shared BO,SC4,NREZ,HNX,HNY
  1799.    HNX=0 : HNY=0
  1800.    If SC4=1
  1801.       SC4=0
  1802.       NREZ=1
  1803.    End If 
  1804.    Screen 0
  1805.    If B<>0
  1806.       Ink 0 : BX=(BO-1) mod 10 : BY=(BO-1)/10 : Box BX*32,BY*16+16 To BX*32+31,BY*16+31
  1807.       Ink 1 : BX=(B-1) mod 10 : BY=(B-1)/10 : Box BX*32,BY*16+16 To BX*32+31,BY*16+31
  1808.       BO=B
  1809.    End If 
  1810. End Proc
  1811. Procedure SHWFILL[F]
  1812.    Set Paint 1
  1813.    Set Pattern F
  1814.    Ink 1,0
  1815.    Bar 260,68 To 284,76
  1816.    Set Paint 0
  1817.    Set Pattern 0
  1818. End Proc
  1819. Procedure SHWSPRITES[B]
  1820.    Shared SPDISP,XS,FC,BC,REZ
  1821.    SC=Screen
  1822.    If SPDISP=1
  1823.       Screen Show 4
  1824.       Screen To Front 4
  1825.       Screen Display 4,,140-NTS*64,,160
  1826.       Screen 4
  1827.       If Length(1)>0
  1828.          Get Sprite Palette 
  1829.       Else 
  1830.          Get Palette 0
  1831.       End If 
  1832.    End If 
  1833.    Screen 0
  1834.    Ink 1,3
  1835.    Text 228,91,Right$("000"+Mid$(Str$(B),2),3)
  1836.    Screen 4
  1837.    If SPDISP=1
  1838.       A=-1 : Repeat : S=B+A
  1839.          If S>0 and S<=Length(1)+1
  1840.             Cls 0,8-1+(A+1)*104,15 To 104+2+(A+1)*104,145
  1841.             Ink FC : Box 8-1+(A+1)*104,15 To 104+1+(A+1)*104,145
  1842.             If S<=Length(1)
  1843.                SB=Sprite Base(S)
  1844.                If SB mod 2=0
  1845.                   X=Deek(SB)*16 : Y=Deek(SB+2)
  1846.                   HX=Deek(SB+6) : HY=Deek(SB+8)
  1847.                   XV=52-X/2
  1848.                   YV=64-Y/2
  1849.                   Paste Bob(A+1)*104+8,16,S
  1850.                   Ink BC,FC,BC : Text(A+1)*104+8,8,Right$("  "+Str$(S),3)+" Plns"+Str$(Deek(SB+4))
  1851.                   Text(A+1)*104+8,154," X:"+Right$(" "+Str$(X),2)+" Y:"+Right$("  "+Str$(Y),3)+" "
  1852.                End If 
  1853.             Else 
  1854.                Ink BC,FC,BC : Text(A+1)*104+8,8,Right$("   "+Str$(S),3)+" Empty "
  1855.                Text(A+1)*104+8,154,"Blank Sprite"
  1856.             End If 
  1857.          Else 
  1858.             Cls 0,8-1+(A+1)*104,0 To 104+2+(A+1)*104,160
  1859.          End If 
  1860.          Inc A
  1861.       Until A=2
  1862.    End If 
  1863.    Screen SC
  1864. End Proc
  1865. Procedure DISPSPRITES
  1866.    Shared SPDISP,XS,NC(),SX(),ST(),FC,REZ,XSIZE,YSIZE
  1867.    SC=Screen
  1868.    Screen 1
  1869.    Clip 
  1870.    Get Block 5,160*XS,7,XSIZE,YSIZE
  1871.    Cls 0,0,0 To 320*XS,160
  1872.    If Length(1)>0
  1873.       Get Sprite Palette 
  1874.    End If 
  1875.    Screen SC
  1876.    Screen To Front SC
  1877. End Proc
  1878. Procedure BXES
  1879.    Shared BIGSPR,LFTO,TPWO,LFTWIN,TPWIN,NCOLS,FC,BC,XS,XSIZE,YSIZE,MP
  1880.    TXS=XSIZE : TYS=YSIZE
  1881.    XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1882.    FC=FC mod NCOLS
  1883.    BC=BC mod NCOLS
  1884.    If FC=BC
  1885.       FC=1
  1886.       BC=0
  1887.    End If 
  1888.    Get Block 1,160*XS,7,TXS,TYS
  1889.    Screen 1
  1890.    Ink 0
  1891.    Bar 0,0 To XS*320,160
  1892.    Ink FC,BC
  1893.    Put Block 1,160*XS,7
  1894.    Box 14,5 To 17+XSIZE*MP,8+YSIZE*MP
  1895.    Box 159*XS,6 To 160*XS+96,136
  1896.    Box 159*XS,6 To 160*XS+TXS,7+TYS
  1897.    Ink BC,FC
  1898.    Text 120*XS-(XS=2)*100,150,"Size X:"+Str$(TXS)+" Y:"+Str$(TYS)
  1899.    LFTO=-1
  1900.    XSIZE=TXS : YSIZE=TYS
  1901. End Proc
  1902. Procedure BXES2
  1903.    Shared BIGSPR,LFTO,TPWO,TPWIN,LFTWIN,FC,BC,XS,XSIZE,YSIZE,MP
  1904.    TXS=XSIZE : TYS=YSIZE
  1905.    XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1906.    BIGBARS
  1907.    Screen 1
  1908.    Ink FC,BC
  1909.    Draw 17+XSIZE*MP,5 To 17+XSIZE*MP,8+YSIZE*MP
  1910.    Draw 160*XS+TXS,6 To 160*XS+TXS,7+TYS
  1911.    XSIZE=TXS : YSIZE=TYS
  1912. End Proc
  1913. Procedure BXES3
  1914.    Shared BIGSPR,FC,BC,XS,XSIZE,YSIZE,MP
  1915.    Set Pattern 0
  1916.    TXS=XSIZE : TYS=YSIZE
  1917.    If BIGSPR
  1918.       XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1919.    End If 
  1920.    Screen 1
  1921.    Ink FC,BC
  1922.    Box 14,5 To 17+XSIZE*MP,8+YSIZE*MP
  1923.    Box 159*XS,6 To 160*XS+96,136
  1924.    Box 159*XS,6 To 160*XS+TXS,7+TYS
  1925.    Ink BC,FC
  1926.    Text 120*XS-(XS=2)*100,150,"Size X:"+Str$(TXS)+" Y:"+Str$(TYS)
  1927.    XSIZE=TXS : YSIZE=TYS
  1928. End Proc
  1929. Procedure BIGBARS
  1930.    Shared FC,BC,XSIZE,YSIZE,BIGSPR,TPWO,TPWIN,LFTO,LFTWIN,XS
  1931.    X=Min(32*XS,XSIZE) : Y=Min(32,YSIZE)
  1932.    SC=Screen
  1933.    Screen 1
  1934.    If TPWO<>TPWIN or LFTO<>LFTWIN
  1935.       Ink 0
  1936.       Bar 154*XS,6 To 158*XS,135
  1937.       Bar 160*XS,1 To 160*XS+96,5
  1938.    End If 
  1939.    Ink FC,BC
  1940.    If BIGSPR and(TPWO<>TPWIN or LFTO<>LFTWIN)
  1941.       Draw 154*XS,6+TPWIN To 158*XS,6+TPWIN : Draw 154*XS,6+Y+TPWIN To 158*XS,6+Y+TPWIN
  1942.       Draw 160*XS+LFTWIN,1 To 160*XS+LFTWIN,5 : Draw 160*XS+LFTWIN+X,1 To 160*XS+LFTWIN+X,5
  1943.       Draw 156*XS,6+TPWIN To 156*XS,Y+6+TPWIN : Draw 160*XS+LFTWIN,3 To 160*XS+LFTWIN+X,3
  1944.       LFTO=LFTWIN : TPWO=TPWIN
  1945.    End If 
  1946.    Screen SC
  1947. End Proc
  1948. Procedure FASTZOOM
  1949.    Shared TPWIN,LFTWIN,BIGSPR,FC,BC,XS,M,XSIZE,YSIZE,MP,ST(),SX(),NC()
  1950.    SC=Screen
  1951.    Screen 1
  1952.    TXS=XSIZE
  1953.    TYS=YSIZE
  1954.    XSIZE=Min(32*XS,XSIZE)
  1955.    YSIZE=Min(32,YSIZE)
  1956.    MP=4
  1957.    If BIGSPR
  1958.       Get Block 6,160*XS,7,96,128
  1959.    End If 
  1960.    Dreg(1)=MP
  1961.    Dreg(2)=160*XS+LFTWIN : Dreg(3)=7+TPWIN
  1962.    Dreg(4)=16 : Dreg(5)=7
  1963.    Dreg(6)=XSIZE : Dreg(7)=YSIZE
  1964.    Areg(0)=Screen Base
  1965.    Call 10
  1966.    If BIGSPR
  1967.       Put Block 6,160*XS,7
  1968.       Del Block 6
  1969.    End If 
  1970.    Set Zone 2,16,7 To 16+XSIZE*MP,7+YSIZE*MP
  1971.    Set Zone 3,160*XS,7 To 160*XS+96,135
  1972.    XSIZE=TXS : YSIZE=TYS
  1973.    Screen SC
  1974. End Proc
  1975. Procedure CREDITS
  1976.    Get Block 5,16,0,304,96
  1977.    Ink 2
  1978.    Bar 17,1 To 303,89
  1979.    Screen Copy 0,256,96,320,144 To 0,18,2
  1980.    Ink 1,2
  1981.    Text 110,12,"AMOS Sprite Editor"
  1982.    Ink 3,2
  1983.    Text 110,22,Chr$(169)+" Mandarin/Jawx 1990"
  1984.    Text 110,42,"Written by"
  1985.    Text 110,52,"Shadow Software"
  1986.    Ink 1,2
  1987.    Text 24,62,"Program:Aaron Fothergill"
  1988.    Text 24,72,"Graphics:Adam Fothergill"
  1989.    Text 24,82,"Fast Zoom:Francois Lionet"
  1990.    While Mouse Key<>0 : Wend 
  1991.    While Mouse Key=0 and Asc(Inkey$)=0 : Wend : While Mouse Key<>0 : Wend 
  1992.    Put Block 5,16,0 : Del Block 5
  1993. End Proc
  1994. DISKERROR:
  1995. SC=Screen
  1996. Screen 0
  1997. Limit Mouse 
  1998. LSTERRN=Errn
  1999. ALERT["Disk Error"+Str$(Errn),"O.K"]
  2000. Screen SC
  2001. Limit Mouse 
  2002. Resume Next 
  2003. GENERALERROR:
  2004. LSTERRN=Errn
  2005. Resume Next 
  2006. Procedure ALERT[M$,B$]
  2007.    Shared Q,NTS
  2008.    Dim M$(12),B$(4)
  2009.    Change Mouse 1
  2010.    L=0 : I=0 : IO=0 : While I<Len(M$)
  2011.       I=Instr(M$,"|",I+1)
  2012.       If I=0 Then I=Len(M$)+1
  2013.       M$(L)=Mid$(M$,IO+1,I-IO-1)
  2014.       IO=I
  2015.    Inc L : Wend 
  2016.    B=0 : I=0 : IO=0 : While I<Len(B$)
  2017.       I=Instr(B$,"|",I+1)
  2018.       If I=0 Then I=Len(B$)+1
  2019.       B$(B)=Mid$(B$,IO+1,I-IO-1)
  2020.       IO=I
  2021.    Inc B : Wend 
  2022.    Auto View On 
  2023.    Screen Open 5,320,L*8+32,4,Lowres
  2024.    Curs Off : Flash Off : Colour 2,$FFF : Colour 3,$F40
  2025.    Screen Display 5,,78-NTS*32-L*4,,L*8+32
  2026.    Screen To Front 5
  2027.    Cls 0
  2028.    Ink 2,0
  2029.    Box 64,0 To 256,L*8+31
  2030.    Ink 3
  2031.    Box 65,1 To 255,L*8+30
  2032.    Ink 2
  2033.    For A=0 To L-1
  2034.       Text 160-Len(M$(A))*4,A*8+12,M$(A)
  2035.    Next A
  2036.    D2=160-(Len(B$)+B*2)*4
  2037.    D=((Len(B$)+B*2)*10)/B
  2038.    Reserve Zone B
  2039.    For A=0 To B-1
  2040.       Ink 2-(A=0)
  2041.       Box D2+D*A,L*8+16 To D2+20+D*A+Len(B$(A))*8,L*8+28
  2042.       Set Zone A+1,D2+D*A,L*8+16 To D2+20+D*A+Len(B$(A))*8,L*8+28
  2043.       Ink 2
  2044.       Text D2+10+D*A,L*8+25,B$(A)
  2045.    Next A
  2046.    Q=0 : While Q=0 : A$=""
  2047.       While Mouse Key<>1 and(A$<>Chr$(13)) : A$=Inkey$ : Wend : Q=Mouse Zone
  2048.       While Mouse Key>0 : Wend 
  2049.       If A$=Chr$(13) Then Q=1
  2050.       If Q=0 Then Bell 70
  2051.    Wend 
  2052.    Reset Zone 
  2053.    Screen Close 5
  2054.    Z=Free+Chip Free+Fast Free
  2055. End Proc
  2056. GRABFROMIFF:
  2057. Screen Hide 1
  2058. Screen Show 6
  2059. Screen To Front 6
  2060. Screen 6
  2061. SCY=Screen Height
  2062. Y=0
  2063. YO=-1
  2064. SCH=200
  2065. SCW=320
  2066. Unpack 7 To 0
  2067. SX=0 : SY=0 : SXO=-1 : XO=-1
  2068. Screen To Front 0
  2069. Wait Vbl 
  2070. Limit Mouse 
  2071. STZONES
  2072. SNUM=IN
  2073. SHWSNUM[SNUM]
  2074. RET=0
  2075. While RET=0
  2076.    K=Mouse Key : Z=Mouse Zone
  2077.    If K=0 Then TICK=0
  2078.    X=X Screen(X Mouse)
  2079.    If X/160<>XO
  2080.       XO=X/160
  2081.       SHWSPRT[Y,SNUM,X]
  2082.    End If 
  2083.    If K>0 and Z>0
  2084.       On Z Gosub DWN,UP,GCUT,GTSCRN,ZILCH,ZILCH,QUIT
  2085.       SHWSPRT[Y,SNUM,X]
  2086.    End If 
  2087.    If Y<>YO
  2088.       YO=Y
  2089.       DISPBAR[Y]
  2090.       SHWSPRT[Y,SNUM,X]
  2091.    End If 
  2092.    If SY<>SYO or SX<>SXO
  2093.       DISPSCRN[SX,SY]
  2094.       SXO=SX : SYO=SY
  2095.    End If 
  2096.    A$=Inkey$
  2097.    If A$=Chr$(30)
  2098.       If Y>0
  2099.          Add Y,-4
  2100.       Else 
  2101.          If SY>0
  2102.             Add SY,-4
  2103.          End If 
  2104.       End If 
  2105.    End If 
  2106.    If A$=Chr$(31)
  2107.       If Y<SCH-24
  2108.          Add Y,4
  2109.       Else 
  2110.          If SY<Max(0,SCY-SCH)
  2111.             Add SY,4
  2112.          End If 
  2113.       End If 
  2114.    End If 
  2115.    If A$=Chr$(28)
  2116.       If SX>0
  2117.          Add SX,-16
  2118.       End If 
  2119.    End If 
  2120.    If A$=Chr$(29)
  2121.       If SX<Max(0,SCX-SCW*REZ)
  2122.          Add SX,16
  2123.       End If 
  2124.    End If 
  2125. Wend 
  2126. Unpack 6 To 0
  2127. Screen Hide 6
  2128. Screen Show 1
  2129. Screen Display 0,,40,,96
  2130. Screen 0
  2131. Reserve Zone 1
  2132. SETBUTZONE
  2133. SHWSPRITES[IN]
  2134. SHWFILL[FP]
  2135. Return 
  2136. ZILCH:
  2137. Return 
  2138. QUIT:
  2139. RET=1
  2140. Return 
  2141. GCUT:
  2142. Auto View On 
  2143. If Chip Free>10000
  2144.    While Mouse Key>0 : Wend 
  2145.    Bob 1,999,1,1
  2146.    Update 
  2147.    Update Off 
  2148.    Screen To Front 6
  2149.    Screen 6
  2150.    Wait Vbl 
  2151.    Limit Mouse 
  2152.    Wait Vbl 
  2153.    Get Block 1,0,0,SCRW,SCRH
  2154.    Wait Vbl 
  2155.    X2O=-1 : Y2O=-1
  2156.    While Mouse Key<>0 : Wend : Wait 5
  2157.    While Mouse Key=0 : Wend : X1=X Screen(X Mouse) : Y1=Y Screen(Y Mouse)
  2158.    While Mouse Key>0 : X2=X Screen(X Mouse) : Y2=Y Screen(Y Mouse)
  2159.       If X2O<>X2 or Y2O<>Y2
  2160.          Gosub SHWBOX : X2O=X2 : Y2O=Y2
  2161.       End If 
  2162.    Wend 
  2163.    Gosub SHWBOX : Put Block 1,0,0
  2164.    Get Bob SNUM,Max(0,X1),Max(0,Y1) To Max(0,X2),Max(0,Y2)
  2165.    Screen 1
  2166.    Get Palette 6
  2167.    Screen 6
  2168.    Update On 
  2169.    Screen To Front 0 : Screen 0
  2170.    Bob Off 1
  2171.    Update 
  2172. End If 
  2173. Return 
  2174. SHWBOX:
  2175. Put Block 1,0,0
  2176. Ink 1
  2177. X3=Min(X1,X2) : X2=Max(X1,X2) : X1=X3
  2178. Y3=Min(Y1,Y2) : Y2=Max(Y1,Y2) : Y1=Y3
  2179. X2=Max(X1+1,X2) : Y2=Max(Y1+1,Y2)
  2180. Box X1,Y1 To X2,Y2
  2181. Return 
  2182. DWN:
  2183. If SNUM>1
  2184.    Dec SNUM
  2185.    SHWSNUM[SNUM]
  2186.    While Mouse Key<>0 and TICK<1000
  2187.       Inc TICK
  2188.    Wend : TICK=Min(TICK,500)
  2189. End If 
  2190. Return 
  2191. UP:
  2192. If SNUM<Length(1)+1
  2193.    Inc SNUM
  2194.    SHWSNUM[SNUM]
  2195.    While Mouse Key<>0 and TICK<1000
  2196.       Inc TICK
  2197.    Wend : TICK=Min(TICK,500)
  2198. End If 
  2199. Return 
  2200. GTSCRN:
  2201. F$=Fsel$("","","Pick a Picture !")
  2202. If F$<>""
  2203.    Auto View Off 
  2204.    Screen Close 6
  2205.    If Upper$(Right$(F$,4))=".ABK"
  2206.       Load F$,5
  2207.       Unpack 5 To 6
  2208.       Erase 5
  2209.    Else 
  2210.       Load Iff F$,6
  2211.    End If 
  2212.    A=Screen Base+72
  2213.    SCRW=Deek(A+4)
  2214.    SCRH=Deek(A+6)
  2215.    REZ=1
  2216.    If Btst(Deek(A),15)
  2217.       REZ=2
  2218.    End If 
  2219.    Screen To Front 0
  2220.    Auto View On 
  2221. End If 
  2222. Return 
  2223. Procedure DISPBAR[YPOS]
  2224.    Screen Display 0,,48+YPOS,,24
  2225. End Proc
  2226. Procedure DISPSCRN[XPOS,YPOS]
  2227.    Shared SCX,SCY
  2228.    Screen Display 6,,48-YPOS,,SCY
  2229.    Screen Offset 6,XPOS,0
  2230. End Proc
  2231. Procedure SHWSNUM[S]
  2232.    S$=Mid$(Str$(S),2)
  2233.    S$=Right$("00"+S$,3)
  2234.    Ink 1,6
  2235.    Text 68,18,S$
  2236. End Proc
  2237. Procedure STZONES
  2238.    Screen 0
  2239.    Reserve Zone 8
  2240.    Set Zone 1,48,8 To 64,24
  2241.    Set Zone 2,96,8 To 112,24
  2242.    Set Zone 3,112,8 To 144,24
  2243.    Set Zone 4,144,8 To 176,24
  2244.    Set Zone 5,176,8 To 208,24
  2245.    Set Zone 6,208,8 To 240,24
  2246.    Set Zone 7,288,8 To 320,24
  2247. End Proc
  2248. Procedure SHWSPRT[YPOS,N,MX]
  2249.    Screen 6
  2250.    If Length(1)>=N
  2251.       BX=80 : If MX<160
  2252.          BX=240
  2253.       End If 
  2254.       BY=YPOS+30+Deek(Sprite Base(N)+8)
  2255.       If YPOS>100
  2256.          BY=BY-34-Deek(Sprite Base(N)+2)
  2257.       End If 
  2258.       Bob 1,BX,BY,N
  2259.       Update 
  2260.    Else 
  2261.       Bob Off 1
  2262.       Update 
  2263.    End If 
  2264.    Screen 0
  2265. End Proc
  2266. ICONTOGGLE:
  2267. Bank Swap 1,2
  2268. NREZ=1
  2269. IN=1
  2270. If Length(1)>0
  2271.    M$="Sprites "
  2272.    For A=1 To 8
  2273.       Poke Start(1)-9+A,Asc(Mid$(M$,A,1))
  2274.    Next A
  2275.    Screen 1
  2276.    Get Sprite Palette 
  2277.    Screen 0
  2278. End If 
  2279. If Length(2)>0
  2280.    M$="Icons   "
  2281.    For A=1 To 8
  2282.       Poke Start(2)-9+A,Asc(Mid$(M$,A,1))
  2283.    Next A
  2284. End If 
  2285. Return 
  2286. SVICONS:
  2287. If Length(2)>0
  2288.    Sprite Off 
  2289.    On Error Goto DISKERROR
  2290.    F$="" : While F$=""
  2291.       F$=Fsel$("*.ABK","","Save an Icon Bank")
  2292.       If F$<>""
  2293.          A$=Upper$(F$)
  2294.          If Right$(A$,4)=".ABK"
  2295.             Save F$,2
  2296.          Else 
  2297.             F$=""
  2298.          End If 
  2299.       Else 
  2300.          F$=" "
  2301.       End If 
  2302.    Wend 
  2303.    NREZ=1
  2304.    On Error Goto GENERALERROR
  2305. End If 
  2306. Return 
  2307. ANMATOR:
  2308. Screen Close 6
  2309. Screen Open 6,320,32,2,Lowres
  2310. Screen Hide 6
  2311. NREZ=1
  2312. If Length(1)>0
  2313.    NFRM=Max(1,NFRM) : FRM=0
  2314.    Auto View On 
  2315.    Synchro On 
  2316.    Amal Off 
  2317.    Screen Open 3,320,16,8,Lowres
  2318.    Screen Display 3,,40,,16 : Get Palette 0
  2319.    Curs Off : Flash Off : Cls 3
  2320.    Screen Copy 0,192,80,288,96 To 3,0,0
  2321.    Ink 1,3
  2322.    Text 100,12,"Image"
  2323.    Screen Copy 0,208,80,272,96 To 3,256,0
  2324.    Text 212,12,"Frame"
  2325.    Reserve Zone 9
  2326.    Set Zone 1,0,0 To 15,15
  2327.    Set Zone 2,16,0 To 31,15
  2328.    Set Zone 3,32,0 To 63,15
  2329.    Set Zone 4,64,0 To 79,15
  2330.    Set Zone 5,80,0 To 95,15
  2331.    Set Zone 6,256,0 To 271,15
  2332.    Set Zone 7,272,0 To 303,15
  2333.    Set Zone 8,304,0 To 319,15
  2334.    Set Zone 9,144,0 To 207,15
  2335.    Ink 1,3 : Box 144,0 To 207,15
  2336.    Text 154,12,"Return"
  2337.    Ink 1,3
  2338.    Text 276,11,"Add"
  2339.    Wait Vbl 
  2340.    Screen Open 5,320,200,NCOLS,Lowres
  2341.    Curs Off : Flash Off : Cls 0
  2342.    Screen Display 5,,40,,200
  2343.    Get Sprite Palette 
  2344.    Wait Vbl 
  2345.    Screen To Front 3
  2346.    Limit Mouse 
  2347.    Screen 5
  2348.    OK=0
  2349.    While OK=0
  2350.       Amal Off 
  2351.       RDRW=0
  2352.       Screen 3
  2353.       Ink 1,3
  2354.       Text 36,11,Right$("000"+Mid$(Str$(IN),2),3)
  2355.       Screen 5
  2356.       Cls 0
  2357.       Ink FC,BC
  2358.       Text 4,24,"Anim 0," : X=7 : Y=0
  2359.       C=0 : While C<NFRM
  2360.          Ink FC,BC : If C=FRM : Ink BC,FC : End If 
  2361.          A$=AN$(C) : If A$="" : A$=Space$(5) : End If 
  2362.          Text X*8+4,Y*8+24,A$
  2363.          X=X+Len(AN$(C)) : If X>=32 : Y=Y+1 : X=0 : End If 
  2364.       Inc C : Wend 
  2365.       L=Y+1
  2366.       Paste Bob 4,24+L*8,IN
  2367.       Bob 1,240,100,IN
  2368.       Channel 1 To Bob 1
  2369.       Z=Free
  2370.       AN$="A 0," : For A=0 To NFRM : AN$=AN$+AN$(A) : Next A
  2371.       If AN$<>"A 0,"
  2372.          Amal 1,AN$
  2373.          Amal On 1
  2374.       End If 
  2375.       While RDRW=0
  2376.          Screen 3 : While Mouse Key>0 : Wend 
  2377.          While Mouse Key=0 : Wend 
  2378.          Z=Mouse Zone
  2379.          If Z=9
  2380.             RDRW=1
  2381.             OK=1
  2382.          End If 
  2383.          If Z=1
  2384.             RDRW=1 : IN=1
  2385.          End If 
  2386.          If Z=2 and IN>1
  2387.             Dec IN
  2388.             RDRW=1
  2389.          End If 
  2390.          If Z=4 and IN<Length(1)
  2391.             Inc IN : RDRW=1
  2392.          End If 
  2393.          If Z=5
  2394.             IN=Length(1)
  2395.             RDRW=1
  2396.          End If 
  2397.          If Z=6 and FRM>0
  2398.             If Mouse Key=2
  2399.                NFRM=FRM : For A=NFRM To 20
  2400.                   AN$(A)=""
  2401.                Next A
  2402.             End If 
  2403.             Dec FRM
  2404.             RDRW=1
  2405.          End If 
  2406.          If Z=7
  2407.             AN$(FRM)="("+Mid$(Str$(IN),2)+",10)"
  2408.             Inc FRM
  2409.             RDRW=1 : If FRM>=NFRM : Inc NFRM : NFRM=Min(20,NFRM) : FRM=NFRM-1 : End If 
  2410.          End If 
  2411.          If Z=3
  2412.             AN$(FRM)="("+Mid$(Str$(IN),2)+",10)"
  2413.             Inc IN : Inc FRM
  2414.             IN=Min(Length(1),IN)
  2415.             RDRW=1 : If FRM>=NFRM : Inc NFRM : NFRM=Min(20,NFRM) : FRM=NFRM-1 : End If 
  2416.          End If 
  2417.          If Z=8 and FRM<NFRM
  2418.             Inc FRM
  2419.             RDRW=1
  2420.          End If 
  2421.       Wend 
  2422.    Wend 
  2423.    Amal Off 
  2424.    Bob Off 
  2425.    Screen Close 3
  2426.    Screen Close 5
  2427. End If 
  2428. Return